#include <bits/stdc++.h>
#define int long long 
using namespace std;

const int maxn = 105;
int arr[maxn];
int dp[maxn][100005]; // dp[i][j] 表示前 i 个中能否找出 几个数, 凑成 j, 所以值只有 0, 1
int n, s;

void solve(){
	cin >> n;
	for (int i=1;i<=n;i++) {
		cin >> arr[i];
		s += arr[i];
	}
	
	for (int i=0;i<=n;i++) {
		dp[i][0] = 1; // 表示不管 前 几个, 都能凑出 0
	}
	
	for (int i=1;i<=n;i++) {
		for (int j=1;j<=1e5;j++) {
			dp[i][j] = dp[i-1][j]; // 不选 第 i 个数字的话
			if (j >= arr[i]) {
				dp[i][j] |= dp[i-1][j-arr[i]]; // 选第 i 个数字的话, 需要看 前 i-1 个能否凑出 j-arr[i]
			}
		}
	}
	int ans = 1e5;
	for (int i=0;i<=1e5;i++) {
		if (dp[n][i]) { // 能凑出 i
			// 找出使得时间最短的结果, 即 两个洗车的时间差距最小
			ans = min(ans, max(i, s-i));
		}
	}
	cout << ans << '\n';
}

signed main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	solve();
	return 0;
}
